A device driver is a body of software code that often enables one or more higher-level software applications to interact with a hardware device. Often, a device driver accepts generic commands from a higher-level application with which a user interacts, and translates the commands into lower-level commands that the printer device being driven is configured to process. By acting as a translator, the device driver can simplify the programming of higher-level applications, since those applications need not be programmed to issue commands in the lower-level languages that devices process. A device driver may also provide a standardized interface through which higher-level applications may invoke a device's functions.
A printer driver is a body of software code that enables higher-level applications to invoke the functions provided by a printer device. Typically, a printer driver provides functionality that may be broadly categorized as rendering, configuration and user experience functionality. Briefly, rendering functionality provided by a printer driver translates information that is generated when a print job is initiated to commands and data that comply with a page description language (PDL) that the printer device is configured to process. Configuration functionality enables a higher-level program to configure and view configuration aspects of a printer device, such as the paper sizes the printer device supports, whether color printing is supported, etc. User experience functionality manages the presentation of information by the printer device to a user during print operations, such as to let the user know that a print job has commenced or completed, that ink supplies are low, etc.
Conventionally, a printer driver comprises a body of code that draws upon a static set of configuration files. The references to the configuration files are hard-modified and re-tested. In addition, because the code that comprises a printer driver is generally written in a language that is compiled prior to execution, the printer driver is specific to a particular processor architecture (e.g., a 32-bit architecture, 64-bit architecture, etc.) in which compilation occurs. As a result, if a user employs a particular printer brand and model and a computing device executing a particular operating system and having a particular processor architecture, a printer driver that is designed specifically for that combination of components is needed to enable the computing device and printer device to interoperate. Given the proliferation of computing devices, operating systems and architectures in the marketplace, and the general assumption on the part of the user community that a computing device will be capable of printing, a large number of printer drivers are in use in the marketplace. Each driver must be managed by its supplier, which is often an independent hardware vendor with core competencies that lean much more heavily toward building user-friendly hardware devices than toward developing printer driver code that executes flawlessly under a host of different operating systems executing under different processor architectures.